<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //    使用function* 可以声明一个generator状态机对象,yield关键字用来定义一个个的状态
        //   - 调用generator函数后返回一个iterator对象,每次调用iterator对象上的next方法,可以执行一个yield后的状态 
        // function* generator() {
        //     yield console.log(1)
        //     yield console.log(2)
        //     yield console.log(3)
        //     yield console.log(4)
        //     yield console.log(5)
        // }
        // const gen = generator()
        // console.log(gen);
        // // 每次调用就会执行一次yield前面的代码
        // gen.next()
        // gen.next()
        // gen.next()
        // gen.next()
        // gen.next()
        // gen.next()

        // function* generator() {
        //     yield console.log(1);
        //     yield console.log(2);
        //     yield console.log(3);
        //     yield console.log(4);
        //     yield console.log(5);
        // }
        // const geng = generator()
        // geng()
        // geng()
        // geng()
        // geng()
        // geng()
        // geng()

        // function* generator() {
        //     yield console.log(1);
        //     yield console.log(2);
        //     yield console.log(3);
        //     yield console.log(4);
        //     yield console.log(5);
        // }
        // const beng = generator()
        // beng()
        // beng()
        // beng()
        // beng()
        // beng()
        // beng()

        // 先请求A 再请求B 再请求C
        // function* getdata() {
        //     console.log('请求A数据');
        //     yield setTimeout(() => {
        //         console.log('A请求成功');
        //     }, 1000)
        //     console.log('请求B数据');
        //     yield setTimeout(() => {
        //         console.log('B请求成功');
        //     }, 1000)
        //     console.log('请求C数据');
        //     yield setTimeout(() => {
        //         console.log('C请求成功');
        //     }, 1000)
        // }
        // const gend=getdata()
        // gend.next()
        // gend.next()
        // gend.next()

        // function* getdata() {
        //     console.log('请求A数据');
        //     yield setTimeout(() => {
        //         console.log('a请求成功');
        //     }, 1000);
        //     console.log('请求b数据');
        //     yield setTimeout(() => {
        //         console.log('b请求成功');
        //     }, 1000);
        //     console.log('请求c数据');
        //     yield setTimeout(() => {
        //         console.log('c请求成功');
        //     }, 1000);
        // }
        // const fff=getdata()
        // fff.next()
        // fff.next()
        // fff.next()



        function* getdata() {
            console.log('请求A数据');
            yield setTimeout(() => {
                console.log('a请求成功');
            }, 1000);
            console.log('请求b数据');
            yield setTimeout(() => {
                console.log('b请求成功');
            }, 1000);
            console.log('请求c数据');
            yield setTimeout(() => {
                console.log('c请求成功');
            }, 1000);
        }
        const bbb=getdata()
        bbb.next()
        bbb.next()
        bbb.next()
    </script>
</body>

</html>